package models

import "gorm.io/datatypes"

// JSON类型需要

// 商品分类模型
type Category struct {
	BaseModel
	Name           string `gorm:"type:varchar(50);uniqueIndex;not null"` // 分类名称
	Description    string `gorm:"type:text"`                             // 分类描述
	ParentID       uint   `gorm:"index"`                                 // 父分类ID（0表示顶级）
	SortOrder      int    `gorm:"default:999"`                           // 排序值
	IsVisible      bool   `gorm:"default:true"`                          // 是否可见
	Level          string `gorm:"type:varchar(20);index"`                // 分类层级（如 "1.2.3"）
	SpecTemplateID uint   `gorm:"index"`                                 // 关联的规格模板ID
}

// 商品模型
type Product struct {
	BaseModel
	Name         string  `gorm:"type:varchar(255);not null"` // 商品名称
	CategoryID   uint    `gorm:"index:idx_category"`         // 分类ID
	MainImage    string  `gorm:"type:varchar(255)"`          // 主图URL
	ImageGallery string  `gorm:"type:text"`                  // 商品图集 [URL1, URL2,...]
	Description  string  `gorm:"type:text"`                  // 商品描述
	DetailHTML   string  `gorm:"type:text"`                  // 富文本详情
	IsOnSale     bool    `gorm:"default:false"`              // 是否上架
	Weight       float64 `gorm:"type:decimal(10,2);default:0;comment:商品重量(kg)"`
	Volume       float64 `gorm:"type:decimal(10,2);default:0;comment:商品体积(m³)"`
}

// 商品规格模型（使用JSON存储简化版本）
type ProductSku struct {
	BaseModel
	ProductID    uint           `gorm:"index:idx_product"`           // 关联商品ID
	Specs        datatypes.JSON `gorm:"type:jsonb"`                  // 规格属性 {颜色:"红", 尺码:"XL"}
	SpecIds      datatypes.JSON `gorm:"type:jsonb;index"`            // 规格属性 {颜色:"红", 尺码:"XL"}
	Price        float64        `gorm:"type:numeric(12,2);not null"` // 售价
	MarketPrice  float64        `gorm:"type:numeric(12,2)"`          // 市场价
	Stock        int            `gorm:"default:0"`                   // 库存
	StockWarning int            `gorm:"default:10"`                  // 库存预警值
	Image        string         `gorm:"type:varchar(255)"`           // SKU图片
	IsDefault    bool           `gorm:"default:false"`               // 是否默认SKU
}

// 商品规格定义模型（完整版，替代JSON存储）
type SpecTemplate struct {
	BaseModel
	Name string `gorm:"type:varchar(50);uniqueIndex;not null"` // 规格名称(如颜色)
}

// 商品规格定义模型（完整版，替代JSON存储）
type SpecKey struct {
	BaseModel
	SpecTemplateID uint   `gorm:"index"`
	Name           string `gorm:"type:varchar(50);uniqueIndex;not null"` // 规格名称(如颜色)
}

type SpecValue struct {
	BaseModel
	SpecTemplateID uint   `gorm:"index"`
	SpecKeyID      uint   `gorm:"index"`                     // 关联规格键ID
	Value          string `gorm:"type:varchar(50);not null"` // 规格值(如红色)
}

type SkuSpecRelation struct {
	BaseModel
	SkuID       uint   `gorm:"primaryKey"`        // Product Sku ID
	ProductID   uint   `gorm:"index"`             // 关联商品ID
	SpecKeyID   uint   `gorm:"primaryKey"`        // 规格键ID
	SpecKeyName string `gorm:"type:varchar(50);"` // 规格键名
	SpecValueID uint   `gorm:"primaryKey"`        // 规格值ID
	SpecValue   string `gorm:"type:varchar(50);"` // 规格值
}

// 设置表名
func (Category) TableName() string        { return "categories" }
func (Product) TableName() string         { return "products" }
func (ProductSku) TableName() string      { return "product_skus" }
func (SpecKey) TableName() string         { return "spec_keys" }
func (SpecValue) TableName() string       { return "spec_values" }
func (SkuSpecRelation) TableName() string { return "sku_spec_relations" }
func (SpecTemplate) TableName() string    { return "spec_template" }
